/* 
vuex最核心管理对象(仓库对象): store
*/
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
/* 
相当于data的对象
*/
const state = {
  count: 0
}

/* 
包含用于直接更新state的方法的对象
mutation中不有业务逻辑和异步代码
*/
const mutations = {
  // 增加1
  INCREMENT (state) {
    state.count++
  },
  // 减少1
  DECREMENT (state) {
    state.count--
  }
}
/* 
包含用于间接更新state的方法的对象
action中可以有业务逻辑和异步代码
*/
const actions = {
  // increment (context) {
  //   context.commit('INCREMENT')
  // },
  // decrement (context) {
  //   context.commit('DECREMENT')
  // },
  incrementIfOdd ({commit, state}) {
    if (state.count%2===1) {
      commit('INCREMENT')
    }
  },

  incrementAsync ({commit}) {
    setTimeout(() => {
      commit('INCREMENT')
    }, 1000)
  }
}

/* 
包含基于state数据的getter计算属性的对象
*/
const getters = {
  evenOrOdd (state) {
    return state.count %2===0 ? '偶数' : '奇数'
  }
}

// 向外默认暴露store对象
export default new Vuex.Store({
  state,
  mutations,
  actions,
  getters
})